#include<bits/stdc++.h> 
using namespace std;
//	火星魔法商店提供一些魔法票，每张票都有一个整数N印在上面，表示当用这张票的时候，你可以
//	获得N倍于所购买产品价值的内容。同时，商店还提供一些免费福利，但是当使用魔法票买这些福
//	利商品的时候，你需要支付N倍于该物品原价的钱。但是，还有负整数的魔法票存在。例如我手头
//	现在有四张券{1 2 4 -1}，以及有一系列商品价值为{7 6 -2 -3}，其中商品价值为负数表示为福
//	利商品。如果我们用票3去购买商品1，则可以获得28元，如果用票3去购买商品4，则需要支付12
//	元。每个票和每个商品最多选择一次，我们的任务就是获得尽可能多的钱。
//1.每一个输入都有一个测试用例，对于每一个测试用例，第一行包含一个整数Nc表示票券数。然后
//	跟着一行Nc个整数。接着是一个整数Np表示商品价格，然后跟着一行Np个整数。 其中Nc和Np都
//	1≤ ≤100000。且可以保证所有数据不超过2^30
//2.对于每一个测试用例，输出最大能获得的钱。
//3.排序，分类
bool cmp_pos(int a, int b){
	return a>b;
} 
bool cmp_neg(int a, int b){
	return a<b;
}
int main(){	//这题也很简单，同正越大的相乘以及同负越小的相乘，结果肯定越大，正负不能相乘 
	int Nc,Np;
	cin>>Nc;
	vector<int> coupon_pos;
	vector<int> coupon_neg;
	for(int i =0;i<Nc;i++){
		int t;
		cin>>t;
		if(t>0) coupon_pos.push_back(t);
		else coupon_neg.push_back(t);
	}
	cin>>Np;
	vector<int> product_pos;
	vector<int> product_neg;
	for(int i =0;i<Np;i++){
		int t;
		cin>>t;
		if(t>0) product_pos.push_back(t);
		else product_neg.push_back(t);
	}
	sort(coupon_pos.begin(), coupon_pos.end(), cmp_pos);
	sort(coupon_neg.begin(), coupon_neg.end(), cmp_neg);
	sort(product_pos.begin(), product_pos.end(), cmp_pos);
	sort(product_neg.begin(), product_neg.end(), cmp_neg);
	long sum = 0;
	for(unsigned int i = 0;i<coupon_pos.size();i++){
		if(i == product_pos.size()) break;
		sum += coupon_pos[i] * product_pos[i];
	}
	for(unsigned int i = 0;i<coupon_neg.size();i++){
		if(i == product_neg.size()) break;
		sum += coupon_neg[i] * product_neg[i];
	}
	cout<<sum<<endl;
	return 0;
} 